package sip_core

import "encoding/xml"

/*
应答命令定义如下:
	<elementname="Response">
		<complexType>
			<sequence>
				<! -- 查询请求的应答信息如下-->
			</sequence>
		</complexType>
	</element>
*/
//SipMsgResponseXML 应答消息xml结构
type SipMsgResponseXML struct {
	*SipMsgXML
	//执行结果标志(必选)
	Result ResultType `xml:"Result"`
}

// DeviceControlResponse 设备控制应答xml结构
type DeviceControlResponse struct {
	//CmdType = DeviceControl
	*SipMsgResponseXML
}

// AlarmResponse 报警通知应答xml结构
type AlarmResponse struct {
	//CmdType = Alarm
	*SipMsgResponseXML
}

// CatalogInfoResponsec 设备目录信息查询应答xml结构
type CatalogInfoResponse struct {
	//CmdType = Catalog
	*SipMsgXML
	//查询结果总数(必选)
	SumNum int `xml:"SumNum"`
	//设备目录项列表,Num表示目录项个数
	DeviceList struct {
		//目录项个数
		Num int `xml:"Num,attr"`
		//设备目录项
		Items []ItemType `xml:"Item"`
	} `xml:"DeviceList"`
	//扩展信息,可多项
	Info string `xml:"Info"`
}

// CatalogInfoReceiveResponse 目录信息查询收到应答xml结构
type CatalogInfoReceiveResponse struct {
	//CmdType = Catalog
	*SipMsgResponseXML
}

// CatalogReceiveResponse 目录收到应答
type CatalogReceiveResponse struct {
	//CmdType = Catalog
	*SipMsgResponseXML
}

// DeviceInfoResponse 设备信息查询应答xml结构
type DeviceInfoResponse struct {
	//CmdType = DeviceInfo
	*SipMsgResponseXML
	//目标设备/区域/系统的名称(可选)
	DeviceName string `xml:"DeviceName"`
	//设备生产商(可选)
	Manufacturer string `xml:"Manufacturer"`
	//设备型号(可选)
	Model string `xml:"Model"`
	//设备固件版本(可选)
	Firmware string `xml:"Firmware"`
	//视频输入通道数(可选)
	Channel int `xml:"Channel"`
	//扩展信息,可多项
	Info string `xml:"Info"`
}

// DeviceStatusResponse 设备状态信息查询应答xml结构
type DeviceStatusResponse struct {
	//CmdType = DeviceStatus
	*SipMsgResponseXML
	//是否在线(必选)ONLINE/OFFLINE
	Online string `xml:"Online"`
	//是否正常工作(必选)
	Status ResultType `xml:"Status"`
	//不正常工作原因(可选)
	Reason string `xml:"Reason"`
	//是否编码(可选)
	Encode string `xml:"Encode"`
	//是否录像(可选)
	Record string `xml:"Record"`
	//设备时间和日期(可选)
	DeviceTime string `xml:"DeviceTime"`
	//报警设备状态列表(可选),num 表示列表项个数(可选)
	Alarmstatus struct {
		//报警设备数量(可选)
		Num   int `xml:"Num,attr"`
		Items []struct {
			//报警设备编码(必选)
			DeviceID string `xml:"NvrDeviceSipId"`
			//报警设备状态(必选)ONDUTY/OFFDUTY/ALARM
			DutyStatus string `xml:"DutyStatus"`
		} `xml:"Item"`
	} `xml:"Alarmstatus"`
	//扩展信息,可多项
	Info string `xml:"Info"`
}

// DeviceConfigResponse 设备配置应答xml结构
type DeviceConfigResponse struct {
	//CmdType = DeviceConfig
	*SipMsgResponseXML
}

// 设备配置查询应答
type ConfigDownloadResponse struct {
	//CmdType = ConfigDownload
	*SipMsgResponseXML
	//基本参数(可选)
	BasicParam *BasicParam `xml:"BasicParam,omitempty"`
	//视频参数范围(可选)
	VideoParamOpt *VideoParamOpt `xml:"VideoParamOpt,omitempty"`
	// //SVAC编码配置(可选)
	SVACEncodeConfig *SVACEncodeConfig `xml:"SVACEncodeConfig,omitempty"`
	// //SVAC解码配置(可选)
	SVACDecodeConfig *SVACEncodeConfig `xml:"SVACDecodeConfig,omitempty"`
}

// PresetQueryResponse 设备预置位查询应答消息xml结构
type PresetQueryResponse struct {
	//CmdType = PresetQuery
	*SipMsgXML
	SumNum int `xml:"SumNum"`
	//设备预置位列表,用于平台间或平台与设备间的预置位查询(必选)
	PresetList struct {
		Num int `xml:"Num,attr"`
		//当前配置的预置位记录,当未配置预置位时不填写
		Items []struct {
			//预置位编码(必选)
			PresetID int `xml:"PresetID"`
			//预置位名称(必选)
			PresetName string `xml:"PresetName"`
		} `xml:"Item"`
	}
}

type PresetQueryList struct {
	XMLName  xml.Name `xml:"Item"`
	DeviceID string   `xml:"DeviceID"`
	//预置位编码(必选)
	PresetID int `xml:"PresetID"`
	//预置位名称(必选)
	PresetName string `xml:"PresetName"`
}

// BroadcastResponse 语音广播应答消息xml结构
type BroadcastResponse struct {
	//CmdType = Broadcast
	*SipMsgResponseXML
}
